v3 core implementation

安装量: 41
排名: #17718

安装

npx skills add https://github.com/proffesor-for-testing/agentic-qe --skill 'V3 Core Implementation'

V3 Core Implementation What This Skill Does Implements the core TypeScript modules for claude-flow v3 following Domain-Driven Design principles, clean architecture patterns, and modern TypeScript best practices with comprehensive test coverage. Quick Start

Initialize core implementation

Task ( "Core foundation" , "Set up DDD domain structure and base classes" , "core-implementer" )

Domain implementation (parallel)

Task
(
"Task domain"
,
"Implement task management domain with entities and services"
,
"core-implementer"
)
Task
(
"Session domain"
,
"Implement session management domain"
,
"core-implementer"
)
Task
(
"Health domain"
,
"Implement health monitoring domain"
,
"core-implementer"
)
Core Implementation Architecture
Domain Structure
src/
├── core/
│ ├── kernel/ # Microkernel pattern
│ │ ├── claude-flow-kernel.ts
│ │ ├── domain-registry.ts
│ │ └── plugin-loader.ts
│ │
│ ├── domains/ # DDD Bounded Contexts
│ │ ├── task-management/
│ │ │ ├── entities/
│ │ │ ├── value-objects/
│ │ │ ├── services/
│ │ │ ├── repositories/
│ │ │ └── events/
│ │ │
│ │ ├── session-management/
│ │ ├── health-monitoring/
│ │ ├── lifecycle-management/
│ │ └── event-coordination/
│ │
│ ├── shared/ # Shared kernel
│ │ ├── domain/
│ │ │ ├── entity.ts
│ │ │ ├── value-object.ts
│ │ │ ├── domain-event.ts
│ │ │ └── aggregate-root.ts
│ │ │
│ │ ├── infrastructure/
│ │ │ ├── event-bus.ts
│ │ │ ├── dependency-container.ts
│ │ │ └── logger.ts
│ │ │
│ │ └── types/
│ │ ├── common.ts
│ │ ├── errors.ts
│ │ └── interfaces.ts
│ │
│ └── application/ # Application services
│ ├── use-cases/
│ ├── commands/
│ ├── queries/
│ └── handlers/
Base Domain Classes
Entity Base Class
// src/core/shared/domain/entity.ts
export
abstract
class
Entity
<
T
>
{
protected
readonly
_id
:
T
;
private
_domainEvents
:
DomainEvent
[
]
=
[
]
;
constructor
(
id
:
T
)
{
this
.
_id
=
id
;
}
get
id
(
)
:
T
{
return
this
.
_id
;
}
public
equals
(
object
?
:
Entity
<
T
>
)
:
boolean
{
if
(
object
==
null
||
object
==
undefined
)
{
return
false
;
}
if
(
this
===
object
)
{
return
true
;
}
if
(
!
(
object
instanceof
Entity
)
)
{
return
false
;
}
return
this
.
_id
===
object
.
_id
;
}
protected
addDomainEvent
(
domainEvent
:
DomainEvent
)
:
void
{
this
.
_domainEvents
.
push
(
domainEvent
)
;
}
public
getUncommittedEvents
(
)
:
DomainEvent
[
]
{
return
this
.
_domainEvents
;
}
public
markEventsAsCommitted
(
)
:
void
{
this
.
_domainEvents
=
[
]
;
}
}
Value Object Base Class
// src/core/shared/domain/value-object.ts
export
abstract
class
ValueObject
<
T
>
{
protected
readonly
props
:
T
;
constructor
(
props
:
T
)
{
this
.
props
=
Object
.
freeze
(
props
)
;
}
public
equals
(
object
?
:
ValueObject
<
T
>
)
:
boolean
{
if
(
object
==
null
||
object
==
undefined
)
{
return
false
;
}
if
(
this
===
object
)
{
return
true
;
}
return
JSON
.
stringify
(
this
.
props
)
===
JSON
.
stringify
(
object
.
props
)
;
}
get
value
(
)
:
T
{
return
this
.
props
;
}
}
Aggregate Root
// src/core/shared/domain/aggregate-root.ts
export
abstract
class
AggregateRoot
<
T
>
extends
Entity
<
T
>
{
private
_version
:
number
=
0
;
get
version
(
)
:
number
{
return
this
.
_version
;
}
protected
incrementVersion
(
)
:
void
{
this
.
_version
++
;
}
public
applyEvent
(
event
:
DomainEvent
)
:
void
{
this
.
addDomainEvent
(
event
)
;
this
.
incrementVersion
(
)
;
}
}
Task Management Domain Implementation
Task Entity
// src/core/domains/task-management/entities/task.entity.ts
import
{
AggregateRoot
}
from
'../../../shared/domain/aggregate-root'
;
import
{
TaskId
}
from
'../value-objects/task-id.vo'
;
import
{
TaskStatus
}
from
'../value-objects/task-status.vo'
;
import
{
Priority
}
from
'../value-objects/priority.vo'
;
import
{
TaskAssignedEvent
}
from
'../events/task-assigned.event'
;
interface
TaskProps
{
id
:
TaskId
;
description
:
string
;
priority
:
Priority
;
status
:
TaskStatus
;
assignedAgentId
?
:
string
;
createdAt
:
Date
;
updatedAt
:
Date
;
}
export
class
Task
extends
AggregateRoot
<
TaskId
>
{
private
props
:
TaskProps
;
private
constructor
(
props
:
TaskProps
)
{
super
(
props
.
id
)
;
this
.
props
=
props
;
}
static
create
(
description
:
string
,
priority
:
Priority
)
:
Task
{
const
task
=
new
Task
(
{
id
:
TaskId
.
create
(
)
,
description
,
priority
,
status
:
TaskStatus
.
pending
(
)
,
createdAt
:
new
Date
(
)
,
updatedAt
:
new
Date
(
)
}
)
;
return
task
;
}
static
reconstitute
(
props
:
TaskProps
)
:
Task
{
return
new
Task
(
props
)
;
}
public
assignTo
(
agentId
:
string
)
:
void
{
if
(
this
.
props
.
status
.
equals
(
TaskStatus
.
completed
(
)
)
)
{
throw
new
Error
(
'Cannot assign completed task'
)
;
}
this
.
props
.
assignedAgentId
=
agentId
;
this
.
props
.
status
=
TaskStatus
.
assigned
(
)
;
this
.
props
.
updatedAt
=
new
Date
(
)
;
this
.
applyEvent
(
new
TaskAssignedEvent
(
this
.
id
.
value
,
agentId
,
this
.
props
.
priority
)
)
;
}
public
complete
(
result
:
TaskResult
)
:
void
{
if
(
!
this
.
props
.
assignedAgentId
)
{
throw
new
Error
(
'Cannot complete unassigned task'
)
;
}
this
.
props
.
status
=
TaskStatus
.
completed
(
)
;
this
.
props
.
updatedAt
=
new
Date
(
)
;
this
.
applyEvent
(
new
TaskCompletedEvent
(
this
.
id
.
value
,
result
,
this
.
calculateDuration
(
)
)
)
;
}
// Getters
get
description
(
)
:
string
{
return
this
.
props
.
description
;
}
get
priority
(
)
:
Priority
{
return
this
.
props
.
priority
;
}
get
status
(
)
:
TaskStatus
{
return
this
.
props
.
status
;
}
get
assignedAgentId
(
)
:
string
|
undefined
{
return
this
.
props
.
assignedAgentId
;
}
get
createdAt
(
)
:
Date
{
return
this
.
props
.
createdAt
;
}
get
updatedAt
(
)
:
Date
{
return
this
.
props
.
updatedAt
;
}
private
calculateDuration
(
)
:
number
{
return
this
.
props
.
updatedAt
.
getTime
(
)
-
this
.
props
.
createdAt
.
getTime
(
)
;
}
}
Task Value Objects
// src/core/domains/task-management/value-objects/task-id.vo.ts
export
class
TaskId
extends
ValueObject
<
string
>
{
private
constructor
(
value
:
string
)
{
super
(
{
value
}
)
;
}
static
create
(
)
:
TaskId
{
return
new
TaskId
(
crypto
.
randomUUID
(
)
)
;
}
static
fromString
(
id
:
string
)
:
TaskId
{
if
(
!
id
||
id
.
length
===
0
)
{
throw
new
Error
(
'TaskId cannot be empty'
)
;
}
return
new
TaskId
(
id
)
;
}
get
value
(
)
:
string
{
return
this
.
props
.
value
;
}
}
// src/core/domains/task-management/value-objects/task-status.vo.ts
type
TaskStatusType
=
'pending'
|
'assigned'
|
'in_progress'
|
'completed'
|
'failed'
;
export
class
TaskStatus
extends
ValueObject
<
TaskStatusType
>
{
private
constructor
(
status
:
TaskStatusType
)
{
super
(
{
value
:
status
}
)
;
}
static
pending
(
)
:
TaskStatus
{
return
new
TaskStatus
(
'pending'
)
;
}
static
assigned
(
)
:
TaskStatus
{
return
new
TaskStatus
(
'assigned'
)
;
}
static
inProgress
(
)
:
TaskStatus
{
return
new
TaskStatus
(
'in_progress'
)
;
}
static
completed
(
)
:
TaskStatus
{
return
new
TaskStatus
(
'completed'
)
;
}
static
failed
(
)
:
TaskStatus
{
return
new
TaskStatus
(
'failed'
)
;
}
get
value
(
)
:
TaskStatusType
{
return
this
.
props
.
value
;
}
public
isPending
(
)
:
boolean
{
return
this
.
value
===
'pending'
;
}
public
isAssigned
(
)
:
boolean
{
return
this
.
value
===
'assigned'
;
}
public
isInProgress
(
)
:
boolean
{
return
this
.
value
===
'in_progress'
;
}
public
isCompleted
(
)
:
boolean
{
return
this
.
value
===
'completed'
;
}
public
isFailed
(
)
:
boolean
{
return
this
.
value
===
'failed'
;
}
}
// src/core/domains/task-management/value-objects/priority.vo.ts
type
PriorityLevel
=
'low'
|
'medium'
|
'high'
|
'critical'
;
export
class
Priority
extends
ValueObject
<
PriorityLevel
>
{
private
constructor
(
level
:
PriorityLevel
)
{
super
(
{
value
:
level
}
)
;
}
static
low
(
)
:
Priority
{
return
new
Priority
(
'low'
)
;
}
static
medium
(
)
:
Priority
{
return
new
Priority
(
'medium'
)
;
}
static
high
(
)
:
Priority
{
return
new
Priority
(
'high'
)
;
}
static
critical
(
)
:
Priority
{
return
new
Priority
(
'critical'
)
;
}
get
value
(
)
:
PriorityLevel
{
return
this
.
props
.
value
;
}
public
getNumericValue
(
)
:
number
{
const
priorities
=
{
low
:
1
,
medium
:
2
,
high
:
3
,
critical
:
4
}
;
return
priorities
[
this
.
value
]
;
}
}
Domain Services
Task Scheduling Service
// src/core/domains/task-management/services/task-scheduling.service.ts
import
{
Injectable
}
from
'../../../shared/infrastructure/dependency-container'
;
import
{
Task
}
from
'../entities/task.entity'
;
import
{
Priority
}
from
'../value-objects/priority.vo'
;
@
Injectable
(
)
export
class
TaskSchedulingService
{
public
prioritizeTasks
(
tasks
:
Task
[
]
)
:
Task
[
]
{
return
tasks
.
sort
(
(
a
,
b
)
=>
b
.
priority
.
getNumericValue
(
)
-
a
.
priority
.
getNumericValue
(
)
)
;
}
public
canSchedule
(
task
:
Task
,
agentCapacity
:
number
)
:
boolean
{
if
(
agentCapacity
<=
0
)
return
false
;
// Critical tasks always schedulable
if
(
task
.
priority
.
equals
(
Priority
.
critical
(
)
)
)
return
true
;
// Other logic based on capacity
return
true
;
}
public
calculateEstimatedDuration
(
task
:
Task
)
:
number
{
// Simple heuristic - would use ML in real implementation
const
baseTime
=
300000
;
// 5 minutes
const
priorityMultiplier
=
{
low
:
0.5
,
medium
:
1.0
,
high
:
1.5
,
critical
:
2.0
}
;
return
baseTime
*
priorityMultiplier
[
task
.
priority
.
value
]
;
}
}
Repository Interfaces & Implementations
Task Repository Interface
// src/core/domains/task-management/repositories/task.repository.ts
export
interface
ITaskRepository
{
save
(
task
:
Task
)
:
Promise
<
void
>
;
findById
(
id
:
TaskId
)
:
Promise
<
Task
|
null
>
;
findByAgentId
(
agentId
:
string
)
:
Promise
<
Task
[
]
>
;
findByStatus
(
status
:
TaskStatus
)
:
Promise
<
Task
[
]
>
;
findPendingTasks
(
)
:
Promise
<
Task
[
]
>
;
delete
(
id
:
TaskId
)
:
Promise
<
void
>
;
}
SQLite Implementation
// src/core/domains/task-management/repositories/sqlite-task.repository.ts
@
Injectable
(
)
export
class
SqliteTaskRepository
implements
ITaskRepository
{
constructor
(
@
Inject
(
'Database'
)
private
db
:
Database
,
@
Inject
(
'Logger'
)
private
logger
:
ILogger
)
{
}
async
save
(
task
:
Task
)
:
Promise
<
void
>
{
const
sql
=
`
INSERT OR REPLACE INTO tasks (
id, description, priority, status, assigned_agent_id, created_at, updated_at
) VALUES (?, ?, ?, ?, ?, ?, ?)
`
;
await
this
.
db
.
run
(
sql
,
[
task
.
id
.
value
,
task
.
description
,
task
.
priority
.
value
,
task
.
status
.
value
,
task
.
assignedAgentId
,
task
.
createdAt
.
toISOString
(
)
,
task
.
updatedAt
.
toISOString
(
)
]
)
;
this
.
logger
.
debug
(
`
Task saved:
${
task
.
id
.
value
}
`
)
;
}
async
findById
(
id
:
TaskId
)
:
Promise
<
Task
|
null
>
{
const
sql
=
'SELECT * FROM tasks WHERE id = ?'
;
const
row
=
await
this
.
db
.
get
(
sql
,
[
id
.
value
]
)
;
return
row
?
this
.
mapRowToTask
(
row
)
:
null
;
}
async
findPendingTasks
(
)
:
Promise
<
Task
[
]
>
{
const
sql
=
'SELECT * FROM tasks WHERE status = ? ORDER BY priority DESC, created_at ASC'
;
const
rows
=
await
this
.
db
.
all
(
sql
,
[
'pending'
]
)
;
return
rows
.
map
(
row
=>
this
.
mapRowToTask
(
row
)
)
;
}
private
mapRowToTask
(
row
:
any
)
:
Task
{
return
Task
.
reconstitute
(
{
id
:
TaskId
.
fromString
(
row
.
id
)
,
description
:
row
.
description
,
priority
:
Priority
.
fromString
(
row
.
priority
)
,
status
:
TaskStatus
.
fromString
(
row
.
status
)
,
assignedAgentId
:
row
.
assigned_agent_id
,
createdAt
:
new
Date
(
row
.
created_at
)
,
updatedAt
:
new
Date
(
row
.
updated_at
)
}
)
;
}
}
Application Layer
Use Case Implementation
// src/core/application/use-cases/assign-task.use-case.ts
@
Injectable
(
)
export
class
AssignTaskUseCase
{
constructor
(
@
Inject
(
'TaskRepository'
)
private
taskRepository
:
ITaskRepository
,
@
Inject
(
'AgentRepository'
)
private
agentRepository
:
IAgentRepository
,
@
Inject
(
'DomainEventBus'
)
private
eventBus
:
DomainEventBus
,
@
Inject
(
'Logger'
)
private
logger
:
ILogger
)
{
}
async
execute
(
command
:
AssignTaskCommand
)
:
Promise
<
AssignTaskResult
>
{
try
{
// 1. Validate command
await
this
.
validateCommand
(
command
)
;
// 2. Load aggregates
const
task
=
await
this
.
taskRepository
.
findById
(
command
.
taskId
)
;
if
(
!
task
)
{
throw
new
TaskNotFoundError
(
command
.
taskId
)
;
}
const
agent
=
await
this
.
agentRepository
.
findById
(
command
.
agentId
)
;
if
(
!
agent
)
{
throw
new
AgentNotFoundError
(
command
.
agentId
)
;
}
// 3. Business logic
if
(
!
agent
.
canAcceptTask
(
task
)
)
{
throw
new
AgentCannotAcceptTaskError
(
command
.
agentId
,
command
.
taskId
)
;
}
task
.
assignTo
(
command
.
agentId
)
;
agent
.
acceptTask
(
task
.
id
)
;
// 4. Persist changes
await
Promise
.
all
(
[
this
.
taskRepository
.
save
(
task
)
,
this
.
agentRepository
.
save
(
agent
)
]
)
;
// 5. Publish domain events
const
events
=
[
...
task
.
getUncommittedEvents
(
)
,
...
agent
.
getUncommittedEvents
(
)
]
;
for
(
const
event
of
events
)
{
await
this
.
eventBus
.
publish
(
event
)
;
}
task
.
markEventsAsCommitted
(
)
;
agent
.
markEventsAsCommitted
(
)
;
// 6. Return result
this
.
logger
.
info
(
`
Task
${
command
.
taskId
.
value
}
assigned to agent
${
command
.
agentId
}
`
)
;
return
AssignTaskResult
.
success
(
{
taskId
:
task
.
id
,
agentId
:
command
.
agentId
,
assignedAt
:
new
Date
(
)
}
)
;
}
catch
(
error
)
{
this
.
logger
.
error
(
`
Failed to assign task
${
command
.
taskId
.
value
}
:
`
,
error
)
;
return
AssignTaskResult
.
failure
(
error
)
;
}
}
private
async
validateCommand
(
command
:
AssignTaskCommand
)
:
Promise
<
void
>
{
if
(
!
command
.
taskId
)
{
throw
new
ValidationError
(
'Task ID is required'
)
;
}
if
(
!
command
.
agentId
)
{
throw
new
ValidationError
(
'Agent ID is required'
)
;
}
}
}
Dependency Injection Setup
Container Configuration
// src/core/shared/infrastructure/dependency-container.ts
import
{
Container
}
from
'inversify'
;
import
{
TYPES
}
from
'./types'
;
export
class
DependencyContainer
{
private
container
:
Container
;
constructor
(
)
{
this
.
container
=
new
Container
(
)
;
this
.
setupBindings
(
)
;
}
private
setupBindings
(
)
:
void
{
// Repositories
this
.
container
.
bind
<
ITaskRepository
>
(
TYPES
.
TaskRepository
)
.
to
(
SqliteTaskRepository
)
.
inSingletonScope
(
)
;
this
.
container
.
bind
<
IAgentRepository
>
(
TYPES
.
AgentRepository
)
.
to
(
SqliteAgentRepository
)
.
inSingletonScope
(
)
;
// Services
this
.
container
.
bind
<
TaskSchedulingService
>
(
TYPES
.
TaskSchedulingService
)
.
to
(
TaskSchedulingService
)
.
inSingletonScope
(
)
;
// Use Cases
this
.
container
.
bind
<
AssignTaskUseCase
>
(
TYPES
.
AssignTaskUseCase
)
.
to
(
AssignTaskUseCase
)
.
inSingletonScope
(
)
;
// Infrastructure
this
.
container
.
bind
<
ILogger
>
(
TYPES
.
Logger
)
.
to
(
ConsoleLogger
)
.
inSingletonScope
(
)
;
this
.
container
.
bind
<
DomainEventBus
>
(
TYPES
.
DomainEventBus
)
.
to
(
InMemoryDomainEventBus
)
.
inSingletonScope
(
)
;
}
get
<
T
>
(
serviceIdentifier
:
symbol
)
:
T
{
return
this
.
container
.
get
<
T
>
(
serviceIdentifier
)
;
}
bind
<
T
>
(
serviceIdentifier
:
symbol
)
:
BindingToSyntax
<
T
>
{
return
this
.
container
.
bind
<
T
>
(
serviceIdentifier
)
;
}
}
Modern TypeScript Configuration
Strict TypeScript Setup
// tsconfig.json
{
"compilerOptions"
:
{
"target"
:
"ES2022"
,
"lib"
:
[
"ES2022"
]
,
"module"
:
"NodeNext"
,
"moduleResolution"
:
"NodeNext"
,
"declaration"
:
true
,
"outDir"
:
"./dist"
,
"strict"
:
true
,
"exactOptionalPropertyTypes"
:
true
,
"noImplicitReturns"
:
true
,
"noFallthroughCasesInSwitch"
:
true
,
"noUncheckedIndexedAccess"
:
true
,
"noImplicitOverride"
:
true
,
"experimentalDecorators"
:
true
,
"emitDecoratorMetadata"
:
true
,
"skipLibCheck"
:
true
,
"forceConsistentCasingInFileNames"
:
true
,
"resolveJsonModule"
:
true
,
"esModuleInterop"
:
true
,
"allowSyntheticDefaultImports"
:
true
,
"baseUrl"
:
"."
,
"paths"
:
{
"@/*"
:
[
"src/*"
]
,
"@core/*"
:
[
"src/core/*"
]
,
"@shared/*"
:
[
"src/core/shared/*"
]
,
"@domains/*"
:
[
"src/core/domains/*"
]
}
}
,
"include"
:
[
"src/*/"
]
,
"exclude"
:
[
"node_modules"
,
"dist"
,
"*/.test.ts"
,
"*/.spec.ts"
]
}
Testing Implementation
Domain Unit Tests
// src/core/domains/task-management/tests/entities/task.entity.test.ts
describe
(
'Task Entity'
,
(
)
=>
{
let
task
:
Task
;
beforeEach
(
(
)
=>
{
task
=
Task
.
create
(
'Test task'
,
Priority
.
medium
(
)
)
;
}
)
;
describe
(
'creation'
,
(
)
=>
{
it
(
'should create task with pending status'
,
(
)
=>
{
expect
(
task
.
status
.
isPending
(
)
)
.
toBe
(
true
)
;
expect
(
task
.
description
)
.
toBe
(
'Test task'
)
;
expect
(
task
.
priority
.
equals
(
Priority
.
medium
(
)
)
)
.
toBe
(
true
)
;
}
)
;
it
(
'should generate unique ID'
,
(
)
=>
{
const
task1
=
Task
.
create
(
'Task 1'
,
Priority
.
low
(
)
)
;
const
task2
=
Task
.
create
(
'Task 2'
,
Priority
.
low
(
)
)
;
expect
(
task1
.
id
.
equals
(
task2
.
id
)
)
.
toBe
(
false
)
;
}
)
;
}
)
;
describe
(
'assignment'
,
(
)
=>
{
it
(
'should assign to agent and change status'
,
(
)
=>
{
const
agentId
=
'agent-123'
;
task
.
assignTo
(
agentId
)
;
expect
(
task
.
assignedAgentId
)
.
toBe
(
agentId
)
;
expect
(
task
.
status
.
isAssigned
(
)
)
.
toBe
(
true
)
;
}
)
;
it
(
'should emit TaskAssignedEvent when assigned'
,
(
)
=>
{
const
agentId
=
'agent-123'
;
task
.
assignTo
(
agentId
)
;
const
events
=
task
.
getUncommittedEvents
(
)
;
expect
(
events
)
.
toHaveLength
(
1
)
;
expect
(
events
[
0
]
)
.
toBeInstanceOf
(
TaskAssignedEvent
)
;
}
)
;
it
(
'should not allow assignment of completed task'
,
(
)
=>
{
task
.
assignTo
(
'agent-123'
)
;
task
.
complete
(
TaskResult
.
success
(
'done'
)
)
;
expect
(
(
)
=>
task
.
assignTo
(
'agent-456'
)
)
.
toThrow
(
'Cannot assign completed task'
)
;
}
)
;
}
)
;
}
)
;
Integration Tests
// src/core/domains/task-management/tests/integration/task-repository.integration.test.ts
describe
(
'TaskRepository Integration'
,
(
)
=>
{
let
repository
:
SqliteTaskRepository
;
let
db
:
Database
;
beforeEach
(
async
(
)
=>
{
db
=
new
Database
(
':memory:'
)
;
await
setupTasksTable
(
db
)
;
repository
=
new
SqliteTaskRepository
(
db
,
new
ConsoleLogger
(
)
)
;
}
)
;
afterEach
(
async
(
)
=>
{
await
db
.
close
(
)
;
}
)
;
it
(
'should save and retrieve task'
,
async
(
)
=>
{
const
task
=
Task
.
create
(
'Test task'
,
Priority
.
high
(
)
)
;
await
repository
.
save
(
task
)
;
const
retrieved
=
await
repository
.
findById
(
task
.
id
)
;
expect
(
retrieved
)
.
toBeDefined
(
)
;
expect
(
retrieved
!
.
id
.
equals
(
task
.
id
)
)
.
toBe
(
true
)
;
expect
(
retrieved
!
.
description
)
.
toBe
(
'Test task'
)
;
expect
(
retrieved
!
.
priority
.
equals
(
Priority
.
high
(
)
)
)
.
toBe
(
true
)
;
}
)
;
it
(
'should find pending tasks ordered by priority'
,
async
(
)
=>
{
const
lowTask
=
Task
.
create
(
'Low priority'
,
Priority
.
low
(
)
)
;
const
highTask
=
Task
.
create
(
'High priority'
,
Priority
.
high
(
)
)
;
await
repository
.
save
(
lowTask
)
;
await
repository
.
save
(
highTask
)
;
const
pending
=
await
repository
.
findPendingTasks
(
)
;
expect
(
pending
)
.
toHaveLength
(
2
)
;
expect
(
pending
[
0
]
.
id
.
equals
(
highTask
.
id
)
)
.
toBe
(
true
)
;
// High priority first
expect
(
pending
[
1
]
.
id
.
equals
(
lowTask
.
id
)
)
.
toBe
(
true
)
;
}
)
;
}
)
;
Performance Optimizations
Entity Caching
// src/core/shared/infrastructure/entity-cache.ts
@
Injectable
(
)
export
class
EntityCache
<
T
extends
Entity
<
any
>>
{
private
cache
=
new
Map
<
string
,
{
entity
:
T
;
timestamp
:
number
}
>
(
)
;
private
readonly
ttl
:
number
=
300000
;
// 5 minutes
set
(
id
:
string
,
entity
:
T
)
:
void
{
this
.
cache
.
set
(
id
,
{
entity
,
timestamp
:
Date
.
now
(
)
}
)
;
}
get
(
id
:
string
)
:
T
|
null
{
const
cached
=
this
.
cache
.
get
(
id
)
;
if
(
!
cached
)
return
null
;
// Check TTL
if
(
Date
.
now
(
)
-
cached
.
timestamp
>
this
.
ttl
)
{
this
.
cache
.
delete
(
id
)
;
return
null
;
}
return
cached
.
entity
;
}
invalidate
(
id
:
string
)
:
void
{
this
.
cache
.
delete
(
id
)
;
}
clear
(
)
:
void
{
this
.
cache
.
clear
(
)
;
}
}
Success Metrics
Domain Isolation
100% clean dependency boundaries
Test Coverage
>90% unit test coverage for domain logic
Type Safety
Strict TypeScript compilation with zero any types
Performance
<50ms average use case execution time
Memory Efficiency
<100MB heap usage for core domains
Plugin Architecture
Modular domain loading capability Related V3 Skills v3-ddd-architecture - DDD architectural design v3-mcp-optimization - MCP server integration v3-memory-unification - AgentDB repository integration v3-swarm-coordination - Swarm domain implementation Usage Examples Complete Core Implementation

Full core module implementation

Task ( "Core implementation" , "Implement all core domains with DDD patterns and comprehensive testing" , "core-implementer" ) Domain-Specific Implementation

Single domain implementation

Task ( "Task domain implementation" , "Implement task management domain with entities, services, and repositories" , "core-implementer" )

返回排行榜